自前Nostr Webクライアント(仮案)
以下のイベント一覧を表示
Home
他人への会話を除外するかしないか
Related to me
自分が指されたevent
「自分の投稿が指された」もとれる?
流石に無理がある
pタグがないということは相手がこちらに通知しないことを選択したということなので尊重すべきかも
こちらも相手に通知するか選択できるようにしてもよいかもね
除外は必要ね
任意でfavを隠す、zapを隠す、指定ユーザの通知を隠す、巻き込み通知を隠すなど
FF外 && リプライ(非RP by FF内) && t.meを含む みたいな高度ミュート?
デフォルトは知ってるkind以外表示しない
I created
自分が作成・発信したevent
全てに対してkind5(削除)を発行できるように
Custom
Global代わり
いろいろ検索できる
いくつか検索条件・ローカル絞り込み条件を保存できる
カラム(かも)毎の設定
バックグラウンドの場合:常にリアルタイム接続・定期リロード・オフ・オフ(内容を保持しない)
バックグラウンド状態でイベントが来たら、バッジを出したり任意の通知で知らせる
表示時:常に接続・定期リロード・手動リロード
untilを常に手軽に変更できるようにしたい
リレーの新陳代謝が起こる度にTL遡りづらくなるよなってちょっと思った
表示仕様
nip05は誰でも登録できるやつは薄めでいい
内部仕様・構造
Shared WorkerはWeb Workerの一種(Service Workerとは別物?)
workerに渡すものは、「常に接続する用」「付け外しする用」「1回だけ使う(リアルタイムで取らない・タイムアウトを設定する)用」にわける
前者2つの基準は?
常に接続しないといけないの通知くらいでは?
ホームすら切断してもよかったり再度取得しなおすこと多そう
通知ですらkinds換えで張り直しするかも
1回だけの場合もEOSEかタイムアウトの早いほうで切るか、EOSEのあともタイムアウトまで待つか選べてもいいかも
イベントの表示用コンポーネントをつくり、さらにkindごとや状況ごとにその中のコンポーネントをわける
repostとかなら中に本物を含ませる
通知なら本物そのままではなくちょっと簡易的にしてもいいかも。少なくともアクションバーは外す
リプライならリプライ先のメンバーを表示()
将来Nostr以外とも統合することが考えられるので、それもkindみたいな感じで内部で分けるか
取得できたリレー一覧にリレーの代わりにbsky.socialとか入れる?
Twitter/Damusの通知欄のようにまとめて表示することもある?
投稿詳細表示は<dialog/>で最前面表示
まぁ前面表示するかは別として、詳細表示からリストに戻ったときに一番上に戻らないように、それか最低限スクロールして読み込んだ分のイベントは全部保持しててほしい
できれば複数アカウント対応(優先度低)
Twitter/Mastodonよりは少ないけどbotとかで複数垢運用することはあるので
ストレージにはなにを保存するか
できるだけ保存しない or めっちゃ保存する
ユーザ名くらいはキャッシュしてもいいかも vs 常に最新の情報を表示しろ
表示した投稿をキャッシュする?
来た順 vs created_at順
EOSE後のは来た順に表示?
過去のイベントを大量にブロードキャストしてる場合全部表示されることになる?
ストリーミングでは必ずsinceをつけるようにするか
画像投稿
投稿画像圧縮機能つけたい
zopflipng,pngquant,libvipsをwasmで入れる(!?)
無理がありそう
S3に上げる機能
URLで「いま見ているTLを共有」できるようにしたい
URLにREQデータが保存されるNostr Playground
画面遷移しそうな要素はできるだけ全部右クリックでURLコピーできるようにする(Snortのこれがつらい)
履歴が大量にstackedするのは嫌なのでon/offとか妥協点とかは必要
自分のTLについては何もしないとか
WebSocketのつなぎかた
できるだけ少ないREQ(最大10)でこねくり回す
イベント取得内部API(hooks?)
useLatestNostrEvent
kind0とか用
基本的に使い回すが、別のREQにより更新される可能性はある(?)
useNostrEvents
useNostrEventsStreaming
useRelayConnection
リレー接続時にsupported_nipsも取得したいね
useNip05Verify